class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    // 属性名
    this.key = key
    // 回调函数
    this.cb = cb

    // 记录Watcher对象到Dep对象上
    Dep.target = this
    // 读取值时触发get方法，调用addSub
    this.oldValue = vm[key]
    // 清除当前对象
    Dep.target = null
  }

  // 当数据发生变化的时候更新视图
  update() {
    let newval = this.vm[this.key]
    if (newval === this.oldValue) return

    this.cb(newval)
  }
}